Ну так в условия строительства - только лагерь 2(доп лагерь).
И можно ещё поставить при условии, что есть больше 1 ратуши (т.е. 2 лагерь 100% построен).
Мой бот единовременно владеет только 1 рудником. 2 ратуши это решение только для первого экспа, у меня на карте много рудников по небольшому количеству золота, комп должен возле каждого из них обустраивать оборону из вышек.
Только что проверил выставил строить у рудника №2 при условии что есть 2 ратуши, и он гад все равно стоит на главной базе,где рудник уже закончился.
Хм... То есть ты делал башни компу, поставил им место только во 2 лагере... Или у 2 рудника. И только при условии что у него есть 2 ратуши или заняты 2 рудника? Хм... Если он их строит, то он понимает что есть 2 рудника/ратуши, но не понимает где именно 2 рудник находится.
всё как сказал Borodach
чтобы такой фигни не было надо запускать таймер на 0 секунд и им восстанавливать здоровье
также при получении урона надо давать скил на +100500 хп а таймером этот скил убирать и устанавливать нужное количество хп
подобных вопросов было дофига и готовых решений как следствие тоже дофига
я вроде тоже как то кидал свою систему обнуления урона
у меня тут дело в том что герои и так моментально ресаются, но отнимается жизни и они улетают на точку реса, а если сработает крест или реинкарнация юнит никуда не улетает а просто ждёт свой таймер и ресается...А что я собственно говоря туплю, у меня же смерти все триггерные как никак, просто в общем событии не отнимать жизнь если прокнул шанс, и не переносить на стартовую локу, а просто реснуть с задержкой. Спасибо за наводку парни 8gabriel8, pro100master, PT153, Absolute, KingMaximax, ssbbssc, , я понял, что мне нужно сделать
local DamageTrigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGING) -- до вычета брони
TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGED) -- после вычета брони
end
TriggerAddAction(DamageTrigger, function()
local damage = GetEventDamage() -- число урона
local damageType = BlzGetEventDamageType() -- тип урона
local target = GetTriggerUnit() -- тот кто получил урон
local caster = GetEventDamageSource() -- тот кто нанёс урон
end)
Еще раз, 'Aams' - щит от магии, он дает маг имун и только. 'Aam2' - нейтрализует урон от магии, при этом в цель можно применять заклинания, обрати внимание там другой бафф.
Активация либо канал, либо любой скил без цели, и дамми каст щита молний на этого героя.
Может быть получится с руной щита молний, но не факт, надо проверять
Кажется я понял в чем дело. В общем, в карте монолит в импорте файлик LoadingScreen.mdx весит 3 кб, когда я его экспортирую на рабочий стол, а затем импортирую обратно в карту с рабочего стола, то он почему-то начинает весить не 3, а 1 кб, а Лоадскрин не показывается при загрузке карты. Но из-за чего это происходит я не знаю.
8gabriel8, Я полагал, что чёрные - юниты/объекты внутри, а красные - юниты/объекты вокруг, вот собственно его задача была расстановка юнитов/объектов вокруг, но ты прав, нужно больше информации.
Поинт - позиция юнита
Группа - создать группу
Выбрать всех юнитов вокруг героя, добавить в Группу
Инт - количество юнитов в Группе
От 1 до Инт
Цикл:
-Установить Таргет = рандом юнит из группы
-Создать Дамми в Поинт
-Приказать последнему созданному замедление(Альянс) на Таргет
-Добавить таймер последнему созданному 0.50
-Убрать Таргет из Группы
-Установить Таргет = нет б.е.
Очистить Группу
Удалить Поинт
call DestroyGroup(udg_Group)
set udg_Group = null
set udg_Point = null
Рад, что ты предложил выход, но я, боюсь, твой код себе никак не перенесу, ибо, как писал в вопросе, лишь на GUI могу работать. 8gabriel8,
мне кажется, проблема не в этом триггере, а в другом, который запускает триггеры и таймеры.
Триггер, запускающий таймер, вряд ли многое испортить может
Мдаааа... Я свою ошибку таки нашёл. Она была в самом тупом месте из всех возможных.
Я действительно не понимаю, это у меня голова не работает совершенно, или в редакторе какие-то баги
Цитата из вопроса, у меня не работает голова.
Так вот, это я дурак полный.
Запихнул обнуление своей переменной ВНИМАНИЕ! в триггер, который игрокам-компьютерам каждые 2 секунды обновляет ресурсы. А вместе с этим и обнуляет снова и снова мою переменную. Обнаружил ли я это через дебаги? Нет, просто от скуки и безнадёжности положения начал прокручивать и листать все триггеры.
Спасибо всем, кто пытался помочь, это было очень приятно) Мне жаль, что вы ломали голову и тратили время впустую по моей глупости и невнимательности.
Вджасс это дополнение к обычному джассу, у себя ты можешь видеть строки объявления библиотеки, продвинутые комментарии и статические константные переменные
function Trig_CW_Cast_Actions takes nothing returns nothing
local unit u = LoadUnitHandle( какая_нибудь_хештаблица, GetHandleId(GetExpiredTimer()), 0 )
local real x1 = GetUnitX( u ) //координаты кастера
local real y1 = GetUnitY( u )
local real from = 800
local real a = GetUnitFacing( u ) //угол поворота юнита
//local real S = 90 //Ширина угла
//local real angle = S/2 //Половина ширины угла
set udg_Angle = a
set udg_Caster = u
//set udg_X = angle
call BJDebugMsg("Угол поворота при касте: "+ R2S(a))
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x1,y1,from, Condition(function TZZ))
//call ForGroup( bj_lastCreatedGroup, function TZZ )
call GroupClear(bj_lastCreatedGroup)
set u = null
endfunction
function TimerOff takes nothing returns nothing
local timer t = GetExpiredTimer()
local timer t2 = LoadTimerHandle( какая_нибудь_хештаблица, GetHandleId(t), 0 )
call FlushChildHashtable( какая_нибудь_хештаблица, GetHandleId(t) )
call FlushChildHashtable( какая_нибудь_хештаблица, GetHandleId(t2) )
call DestroyTimer( t )
call DestroyTimer( t2 )
set t = null
set t2 = null
endfunction
function Timer takes nothing returns nothing
local timer t = CreateTimer()
local timer t2 = CreateTimer()
local unit u = GetTriggerUnit()
call SaveUnitHandle( какая_нибудь_хештаблица, GetHandleId( t ), 0, u )
call TimerStart( t, /*Периодичность*/0.04, true, Trig_CW_Cast_Actions )
call SaveTimerHandle( какая_нибудь_хештаблица, GetHandleId(t2), 0, t )
call TimerStart( t2, /*Время которое будет работать таймер*/36, false, TimerOff )
set t = null
set t2 = null
set u = null
endfunction
//===========================================================================
function InitTrig_Cast takes nothing returns nothing
set gg_trg_Cast = CreateTrigger( )
set bj_lastCreatedGroup = CreateGroup()
call TriggerRegisterAnyUnitEventBJ( gg_trg_Cast, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Cast, Condition( function Trig_CW_Cast_Conditions ) )
call TriggerAddAction( gg_trg_Cast, function Timer )
endfunction
Неразрушаемые декорации очень геморройны, особенно отсутствие многих триггеров в разделе animation. Уж лучше браться за изменение через РО/макс. угол поворота или же макс. угол крена, а затем скрыть декорацию и показать только в нужное для игрока, время
Равно в варике округляет, а вот неравно - нет. У тебя и выводит 90.000, потому что R2S округляет до 3-го знака, а на самом деле там было что-то вроде 89.999999. 90 != 89.999999 в варике, потому условие прошло. Хочешь, чтобы не прошло, используй not (90 == angle). Тогда 89.999999 округлится до 90 и условие не пройдёт.
Либо используй то, что показал Скорп, тоже подойдёт.
Создаешь 2 модельки, у одной анимация стрельбы, у другой удара штыком. За тем создаешь 2 юнитов с разными модельками и при смене режима (на базе любого метамарфоза) меняешь юнита.
Все анимации атаки вписанные в юнита будут задействованы рандомно, даже если прикажешь триггером использовать конкретную анимку. Дабы избежать этого, нужно использовать лишь одну анимацию атаки.
do
local f = InitGlobals -- записываем InitGlobals в переменную
function InitGlobals() -- заменяем оригинальную InitGlobals своей
f() -- вызываем оригинальную InitGlobals из переменной
InitMyTrigger()
end
end
function InitMyTrigger()
local SpellTrigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
local player = Player(i)
TriggerRegisterPlayerUnitEvent(SpellTrigger, player, EVENT_PLAYER_UNIT_SPELL_CAST)
end
TriggerAddAction(SpellTrigger, function()
local eventId = GetHandleId(GetTriggerEventId())
local caster = GetTriggerUnit()
local casterX, casterY = GetUnitX(caster), GetUnitY(caster)
local spellId = GetSpellAbilityId()
-- local spellX, spellY = GetSpellTargetX(), GetSpellTargetY()
if spellId == FourCC('A000') then -- Призыв
print("призыв")
local newu = CreateUnit(GetOwningPlayer(caster), FourCC('h000'), casterX, casterY, GetUnitFacing(caster))
end
end)
end
RobertStevenson, вейты вообще зло, а отсчёт можно сделать таймером. Точнее и без неожиданных багов.
Ждать пока - это вейт в цикле, работает это просто отвратно, сам с этим сталкивался. Лучше заменить на событие смерти колдуна.
Я всё же думаю, что дело не в вейтах. Выводи имя героя Hero[A]. Лучше выводить так: ("герой - ") + (Имя юнита (Hero[A])) + " " + (Число в строку (А)).
Если нет имени - героя просто нет в этой переменной.
Наименее ресурсозатратным для игрового процесса будет кастовать саму волну через отдельного дамми, который создаётся специально и только для волны силы. Сама волна наносит 1 ед урона. И потом определив, тип юнит-источника урона - наносим нужный урон от лица героя-хозяина юнита "волна силы".
В варианте "чекать группы каждые 0.0х сек" будет засоряться память и скорее всего будут подлагивания, в варианте со спец-дамиками засорится РО, выбирай из двух зол.
Astra, очень багано
так как после последней атаки может многое изменится
так же урон при событие юнит получает урон зависит от брони и прочих резистов
если юнит с уроном 100 нанёс удар по врагу с физ резистом 50% а потом получил бафф/предмет на +100 урона то скилом нанесёт 50 урона хотя должен был бы нанести 200
тут нужно юзать бд
при касте скила брать из бд начальный урон юнита, бонусы предметов и бонусы всех бафов
тема кстати уже много раз поднималась
и каждый раз все заканчивалось тем что афтар забивал на подобную систему либо писал "вы все нубы/тролли и не знаете/не хотите сказать как сделать это легко и просто"
ибо подобная система требует кучи кода и как минимум 30 прочтённых статей по jass
вот статья о бд
Yonsen, обычно юзают предметную способность "запас здоровья" до 999999к хп. Обычно на все случаи жизни, любимый метод. Даем ее в момент нанесения урона. Когда срабатывает событие "юнит получает", то в этот момент урон еще не произошел, нам как бы оповешают, что он будет через 0.00 сек. Получает пассивку и через 0.00 сек урон. Потом хилим. И удаляем способность. Все.
А еще лучше можно жаровню илидана заюзать для сжигания маны и срабатывания событий, которые вызываются при включении и выключении этой горелки. Причем она еще и сама автоматически выключится, когда закончится мана.
Есть функция проверки кол-ва ловкости героя, при этом можно посмотреть сколько ловкости от характеристик и сколько от предметов, исходя из кол-ва ловкости вручать предметные абилки на атаку.
Самое простое - апгрейды, триггерно повышать уровень улучшения которое будет действовать на героя, увы это не идеальный вариант, но один из самых просты. Так же вручать способности предметов на регенерацию здоровья \ маны.
Напрямую - никак, есть место только под 5 способностей. Делать свою систему прокачки способностей из спеллбука или какие либо еще способы, на подобии рпгшных карт.
Странно, что эта подписка показывается вам. Где вы создаете игру?
Пересмотрев прошлый вопрос, я так понял вы создаете игру на iccup, yes? Если так, то вам надо купить ВИП подписку. (теперь повер ап и вип одно целое) Если же вы не желаете покупать подписку, вы можеет бесплатно хостить через сайт. (вход осуществляется через ирина коннектор, статья про неё, хоть и старая, но есть.)
function PlayUnitAnimationFromChat()
local this=CreateTrigger()
TriggerRegisterPlayerChatEvent(this,Player(0),"",true)
TriggerAddAction(this, function()
local s=S2I(GetEventPlayerChatString())
SetUnitAnimationByIndex(mainHero,s)
--print(GetUnitName(mainHero).." "..s)
end)
end
mainHero - глобалка юнит
Вводим в чат цифру и юнит воспроизводит анимацию
ledoed, были там анимации, в шапке проблема подробно описана.
это кароч оказалась мертвая тема искать проблему, тупо перенес мясо на рабочую модельку и заново запилил анимки.
Но если вдруг кто-то отпишется с решением проблемы после, то изменю лучший ответ
Навряд ли тебе будет кто-то что то объяснять, так что опишу на пальцах.
War3ModelEditor - лично использую только для просмотра моделей создания эффектов и правильного наложения текстур. Mdlvis - можно использовать для создания костей и анимации но только на версии 1.39 и то это будет очень не простое дело. По поводу соединения вершин в mdlvis вроде есть такая штучка.
Можно так же научиться владению софтом за границами Warcraft. 3dsmax или Maya в принципе хороший выбор можно начать с освоения эти двух прог и потом через плагин Neodex для 3dsmax перегонять в формат варика. Maya самый вроде как доступный и удобный софт для создания анимаций. Если не хочешь мучатся с этим софтом то с прогами чисто для варика будет сложнее склепать что-то достойное.
Анимированнию увы не научу, сложно вспомнить как я наверстал знания в этой области. Но точно помню что все началось с этой статьи, а там методом проб и ошибок я понял основные составляющие анимации. Дальше я начал по инету собирать кусочки информации как и что делать.
В принципе все, это не советы, а скорее наводка на то что тебе стоит искать или осваивать.
ведь это сложнейшая часть считается.
Для кого как! В специализированных прогах для этого есть куча иструментов которые автоматизируют многие процессы. Из за их отсутствия в Mdlvis создание анимации превращается в пытку которой нет конца. Вот например для меня самая невыносимая часть это текстурирование, вечно недоволен результатом своей роботы, но это только в том случаи если текстуру я не могу нарисовать сам.
Определил причину невидимости модели после сохранения в war3me. В Geoset Animation Manager должна стоять Alpha 1, а он почему-то делает 0 или -1.
Поставил в Geoset Animation Manager не глобальные Color и Alpha, а для первых кадров всех 6 анимаций. Стало всё нормально и триггерные костыли не нужны.
Модель красного свечения ауры на юнитах:
Мне кажется, дело в том, что движок третьего варкрафта умеет работать только с низкополигональными моделями (впрочем, я могу ошибаться, но глюки с тенями у меня были только на "сложных" моделях с гладкими углами)
Переимпортировал модель, заменил редактор и всё работает.
Bender2000, код самой игры переписывать не надо
чтобы сделать триггерные скилы в обычном мили надо изменить несколько файлов в mpq архивах
триггеры на чистом jass пишутся в Blizzard.j а сами скилы делаются в слк
но для игры по сети у всех игроков должны быть твои mpq вместо стандартных
Ошибка в коде, jass работает везде. pro100master, пишет бред, ибо незнает что все карты для warcraft 3 имеют сценарий на Jass, т.к все ваши триггеры в итоге преобразуются в jass и хранятся в war3map.j, тоже самое и с АИ, которое для кампаний изначально написано на jass и прекрасно работает.
Смотрите где у вас ошибки, cjass\vjass интерпретаторы могут не верно работать с картами кампаний, пробуйте написать код на чистом jass без надстроек.
Здравствуй, посмотрел карту, на счет вейтов кстати не думаю хорошая идея ими пользоваться, но вызывать какую именно "щупальце" в принципе можно сделать так(проверкой на уровень способности) и все это будет одним триггером
тоже самое можно и с первыми 3 сократить в 1, простой проверкой на уровень способности
Чистая геометрия. Дано 2 точки, начало скачка и конец, расположены они на условном прямоугольнике на противоположных сторонах самых коротких краёв. Следовательно нужно нарисовать этот прямоугольник обычным rect (областью) между этими точками и дать урон в этой области. Не написан метод реализации:GUI, JASS, LUA кстати.
struct linkedList
private static constant timer period = CreateTimer( )
private thistype prev
private thistype next
private stub method destroy takes nothing returns nothing
// Здесь должен находится Ваш код.
set this.prev.next = this.next
set this.next.prev = this.prev
if ( thistype( 0 ).next == 0 ) then
call PauseTimer( thistype.period )
endif
call thistype.deallocate( this )
endmethod
private static method iterate takes nothing returns nothing
local thistype this = thistype( 0 ).next
loop
exitwhen ( this == 0 )
// Здесь должен находится Ваш код.
call this.destroy( )
set this = this.next
endloop
endmethod
private static method create takes nothing returns thistype
local thistype this = thistype.allocate( )
set this.next = thistype( 0 )
set this.prev = thistype( 0 ).prev
set this.next.prev = this
set this.prev.next = this
// Здесь должен находится Ваш код.
if ( this.prev == 0 ) then
call TimerStart( thistype.period, 0.03125, true, function thistype.iterate )
endif
return this
endmethod
endstruct
ScopteRectuS, Переменные инициализируются при инициализации карты, она же вроде как глобальная udg_HeroGFL_owner. Или в коде карты насильно инициализировать?
Они же не локалки ScopteRectuS, м, реально null возвращает боевая единицы. Смешно. Окей: И как ему определить созданную во время игры боевую единицу?
Отлично, значит мы можем однозначно соотнести номер игрока с юнитом в массиве?
переключившихся в летающий режим героев добавляем в глобальную группу
запускаем таймер на малом периоде, что-то около 0.04, который перебирает всех в группе и выполняет смещение к взятой из массива точке со скоростью движения героя (тут можно экспериментировать с разными алгоритмами движения, главное что все данные мы можем легко получить из массива по номеру игрока которому принадлежит юнит)
отслеживаем все приказы для героев в состоянии полета и на основе этого запоминаем текущую точку куда юнит должен двигаться и прочие данные, записываем эти данные в массив
при отключении полета убираем героя из группы и перестаем отслеживать его приказы
А, т.е. в карте уже есть системы триггерного движения? Значит самое время унифицировать их в одну, чтобы одна и та же система управляла и полетом и физикой и другими видами триггерного движения.
Вариант без даммика:
Есть способность предмет "увеличение поля зрения" с иконкой телескопа (Alsi) добавляй его в здание, когда туда кто то заселяется и убирай когда здание пустует
(в способности можно указать радиус поля зрения)
Вариант с даммиком: вешай на здание способность Магический огонь (Afae)
Все намного проще чем Вы думаете. В меню редактора "Сценарий => Дополнительно" есть такая галочка, называется "Скрытые области частично видимы", убери эту галочку и будет тебе магия)
p.s.: Если сразу не включится функция пересохрани карту и перезапусти варик.
Если охото сделать зарыды со счетчиком то тут 2 пути:
Юзать стандартные абилки со счетчиком зарядов, а их только 2 совы охотницы и вспышки орудийного расчета гномов. Увы первая цель декор онли, вторая цель точка онли, на юнита никак, кстати хорошо подходит под кастом блинки, кастуется почти мгновенно, быстрее канала, без всяких рукомаханий.
Использовать N способностей с разными иконками, на которых будет изображен счетчик, изменяя уровень способности или вовсе весть скилл через 'Eneg' (Техника, скилл механика, позволяет изменять поля скиллов) то можно создать скиллы со счетчиком, допустим пока есть заряды у скилла нету кулдауна, скилл последнего заряда имеет кулдаун.
Увы туча ипорта да и найти качественные иконки со счетчиком дело непростое.
Какой точный вопрос, однако.
Ответ: триггерно, либо в редакторе объектов, если нужно изменить характеристики, не создаваемые/изменяемые триггерно.
Попытаюсь сыграть в экстрасенса, подстрахуюсь логикой:
Если нужно, чтобы изменялась характеристика количественно, т.е, например, увеличивался наносимый урон, то в действии нанесения урона вместо точного значения нужно выставить функию (формулу, зависимость etc.) имеющую аргументом уровень способности.
Если нужно менять характеристику качественно, например, тип наносимого урона, то следует использовать условия, сравнивающие уровень способности с нужным значением и... далее есть несколько вариантов реализации, но наиболее подходящий - просто выполнять все последующие действия триггера внутри оператора, а затем создать несколько раз скопировать его для других условий. Хотя, с точки зрения программирования, это не очень хороший вариант.
отменять постройку юнита если технология уже ап
либо как сразу говорили через ап здания
где каждому твоему зданию будет соответствовать такое же здание но с дополнительным слотом
с продажей юнита открываешь доту и смотришь как там сделан спелл передать предметы у куры
он сделан как раз через продажу юнита
иначе никак
если не нравится пожалуйся богу об этом
или близардам
пусть выпустят новый патч специально для тебя
Вместо когтей под задачу лучше подходит аура с бонусным уроном, можно настроить как прямой бонус так и процент, плюс отображается в статусе.
Если система работает в рамках десятков юнитов, за оптимизацию не беспокойся. Если бы речь шла о сотнях юнитов с данным эффектом, но сомневаюсь.
Вот статья, где описаны морфы с примерами: xgm.guru/p/wc3/powerups
Сделаешь по образцу свой морф через руну, потом предмет-пустышку, потом триггер, что юнит использует предмет, в условие тип предмета-пустышки, в действиях даёшь герою руну с морфом, а также добавляешь способность, которая возвращает обратно, можно способность-пустышку, которая при срабатывании даёт руну обратного морфа.
ScopteRectuS, Я решил проблему там баг, если указать регион как точку назначения портала, то с ним триггеры перестают работать. Я просто указал другой регион. biridius, Ну это альфа версия, за 5 мин сделал, знаю об утечках.
Я юзал морф, а не грейд. Грейд был в другой наработке, и там не было проблем с анимацией. В наработке с морфом нет никаких вейтов.
Всё остальное какая-то ерунда, какие переменные? Грейд делается и всё.
Отмена для меня преимущество такое себе
И тем не не менее, отменять грейд тебе нужно, потому преимущество вполне себе.
Я больше-то вот как раз вышеупомянутые баги имел в виду
Эффекты аур могут остаться на юните, с героями ещё хуже. Так-то всё написано тут, пункт 19.
С. Умер юнит
У. Юнит = Герой
Д. Написать: Имя владельца убившего + убил Имя владельца умершего
Установить переменную Kill с индексом - номер игрока владельца убившего + 1
Если/Тогда/Иначе/Функция
У. Kill с индексом - номер игрока владельца убившего = 2
Д. Сделал двойное убийство!
Если/Тогда/Иначе/Функция
У. Kill с индексом - номер игрока владельца убившего = 3
Д. Сделал тройное убийство убийство!
Переменная должна обнуляться. Т.е. ты должен отслеживать время после убийства героя, к примеру если прошло 5 сек после убийства, то уже не будет двойное убийство, если прошло меньше 5 сек и ты убил ещё одного = двойное убийство.
Вот так, но я в шоке, только что не работало, а теперь работает, то-то я смотрю у меня в других наработках эта удалялка стоит и норм удаляет, а в этой нет, видимо глюк был. ScopteRectuS, Вот как раз так не работает
» WarCraft 3 / Редактор ИИ и доп. рудник
» WarCraft 3 / Изменение графики на SD
» WarCraft 3 / Отлавливать урон.
» WarCraft 3 / Щит молний.
» WarCraft 3 / черные квадраты
» WarCraft 3 / нерабочий триггер
» WarCraft 3 / Нужно определить угол
» WarCraft 3 / Модель
» WarCraft 3 / Анимация атаки.
» WarCraft 3 / Как работают триггеры?
» WarCraft 3 / Триггерный урон от способности
» WarCraft 3 / Инком от маны
» IrInA Host Bot / Создание игры
» WarCraft 3 / Анимация у модели
» WarCraft 3 / Триггерный скилл
» WarCraft 3 / Количество глобальных переменных
» WarCraft 3 / Проблемы с морфом
» WarCraft 3 / Как сделать
» WarCraft 3 / предметы и тип предмета
» WarCraft 3 / Предмет через руну
» WarCraft 3 / Не работает триггер
» WarCraft 3 / Здравствуйте разрешите вопрос задать?
» WarCraft 3 / Команды удаления переменных